package org.arbeitspferde.groningen.http.open; import com.google.common.util.concurrent.AbstractIdleService; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; import com.google.inject.servlet.GuiceFilter; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.ServletContextHandler; import javax.servlet.DispatcherType; import java.util.EnumSet; import java.util.logging.Level; import java.util.logging.Logger; /** * Service to manage the lifecycle of HTTP Server. */ @Singleton public final class HttpService extends AbstractIdleService { private static final Logger log = Logger.getLogger(HttpService.class.getCanonicalName()); private final GuiceFilter guiceFilter; private final ServletContextHandler contextHandler; private final Server server; @Inject public HttpService(GuiceFilter guiceFilter, ServletContextHandler contextHandler, Provider<Server> serverProvider) { this.guiceFilter = guiceFilter; this.contextHandler = contextHandler; this.server = serverProvider.get(); } @Override protected void startUp() throws Exception { contextHandler.addFilter(new FilterHolder(guiceFilter), "/*", EnumSet.allOf(DispatcherType.class)); contextHandler.addServlet(DefaultServlet.class.getCanonicalName(), "/"); server.setHandler(contextHandler); server.start(); log.log(Level.INFO, "Started HTTP Server at port {0}", ((ServerConnector) server.getConnectors()[0]).getLocalPort()); } @Override protected void shutDown() throws Exception { log.log(Level.INFO, "Shutting down HTTP server."); server.stop(); } }